# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 5、中级 - 接口测试框架.py
@time : 2022/5/14 19:27
"""

"""
测试框架基本能力
    项目管理 ： pip virtualenv
    用例编写 ： pytest
    领域能力 ： app 、 web 、 http
    执行调度 ： pytest 、 pycharam 、 shell 、 jenkins
    测试报告 ： allure2

HTTP 测试能力
    请求方法构造 : get ，post , put , delete , head
    请求体构造 ： from , json , xml , binary
    响应结果分析 ： status code , response body , json path , xpath

框架特点 ： Requests
    功能全面 ： http/https 支持全面
    使用简单 ： 简单易用，不用关心底层细节
    定制性高 ： 借助于 hook 机制完成通用处理

常见 http 请求方法构造
    r = requests.put('https://httpbin.org/put',data={'key':'value'})
    r = requests.delete('https://httpbin.org/delete')
    r = requests.head('https://httpbin.org/get')
    r = requests.options('https://httpbin.org/get')

常见 API ：
    r.status_code  状态码
    r.headers['content-type']  头消息
    r.encoding      编码
    r.text   解码之后的文本
    r.json()
"""

# 演练环境 ： 1、http://httpbin.testing-studio.com     2、学院论坛   3、企业微信


import requests


class TestDemo:
    def test_get(self):
        r = requests.get('http://httpbin.testing-studio.com/get')
        # 结果是 ： 响应状态码 200
        print(r.status_code)
        # 结果是 ： <Response [200]>
        print(r)
        # 结果是 ： {'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.testing-studio.com', 'User-Agent': 'python-requests/2.27.1', 'X-Forwarded-Host': 'httpbin.testing-studio.com', 'X-Forwarded-Scheme': 'https', 'X-Scheme': 'https'}, 'or
        print(r.json())
        """
        {
          "args": {}, 
          "headers": {
            "Accept": "*/*", 
            "Accept-Encoding": "gzip, deflate, br", 
            "Host": "httpbin.testing-studio.com", 
            "User-Agent": "python-requests/2.27.1", 
            "X-Forwarded-Host": "httpbin.testing-studio.com", 
            "X-Forwarded-Scheme": "https", 
            "X-Scheme": "https"
          }, 
          "origin": "10.7.136.128", 
          "url": "https://httpbin.testing-studio.com/get"
        }
        """
        print(r.text)
        # 结果是： application/json
        print(r.headers.get("Content-Type"))
        # 断言
        assert r.status_code == 200, "响应状态码不是200"
